 1. group by子句
   
   GROUP BY语句通常与聚组函数一起使用，按照一个或多个列对数据进行分组，对每
个组进行聚合操作。
   -- 计算emp表每个部门的平均工资
select deptno, avg(sal)
from emp
group by deptno; 
   -- 计算emp每个部门中每个岗位的最高薪水
select deptno, job, max(sal)
from emp
group by deptno, job;
   where子句针对表中的数据发挥作用；having针对查询结果（聚组以后的结果）发挥作用
   where子句不能有分组函数；having子句可以有分组函数
   having只用于group by分组统计之后
   -- 求每个部门的平均薪水大于2000的部门
   select deptno, avg(sal)
from emp
group by deptno
having avg(sal) > 2000;
   
 2.表连接
   
   Hive支持通常的SQL JOIN语句。默认情况下，仅支持等值连接，不支持非等值连接。
   JOIN 语句中经常会使用表的别名。使用别名可以简化SQL语句的编写，使用表名前
缀可以提高SQL的解析效率。
   连接查询操作分为两大类：内连接和外连接，而外连接可进一步细分为三种类型：
   1).内连接: [inner] join
   2).外连接 (outer join)
    - 左外连接。 left [outer] join，左表的数据全部显示
    - 右外连接。 right [outer] join，右表的数据全部显示
    - 全外连接。 full [outer] join，两张表的数据都显示
    案例演示：
	-- 准备数据
    u1.txt数据：
1,a
2,b
3,c
4,d
5,e
6,f 
    u2.txt数据：
4,d
5,e
6,f
7,g
8,h
9,i
    create table if not exists u1(
id int,
name string)
row format delimited fields terminated by ',';
    
	create table if not exists u2(
id int,
name string)
row format delimited fields terminated by ',';
    
	load data local inpath '/home/hadoop/data/u1.txt' into table u1;
    load data local inpath '/home/hadoop/data/u2.txt' into table u2;
	-- 内连接
   select * from u1 join u2 on u1.id = u2.id;
   -- 左外连接
   select * from u1 left join u2 on u1.id = u2.id;
   -- 右外连接
   select * from u1 right join u2 on u1.id = u2.id;
   -- 全外连接
   select * from u1 full join u2 on u1.id = u2.id;
 
 3.多表连接
   
   连接 n张表，至少需要 n-1 个连接条件。例如：连接四张表，至少需要三个连接条件。
   多表连接查询，查询老师对应的课程，以及对应的分数，对应的学生：
   select *
 from techer t left join course c on t.t_id = c.t_id
        left join score s on s.c_id = c.c_id
        left join student stu on s.s_id = stu.s_id;
    Hive总是按照从左到右的顺序执行，Hive会对每对 JOIN 连接对象启动一个MapReduce 任务。
    上面的例子中会首先启动一个 MapReduce job 对表 t 和表 c 进行连接操作；然后再启动一个
 MapReduce job 将第一个 MapReduce job 的输出和表 s 进行连接操作；然后再继续直到全部操作；
 
 4.笛卡尔积
   
   满足以下条件将会产生笛卡尔集：
   没有连接条件
   连接条件无效
   所有表中的所有行互相连接
   如果表A、B分别有M、N条数据，其笛卡尔积的结果将有 M*N 条数据；缺省条件下hive不支持笛卡尔积运算；
   set hive.strict.checks.cartesian.product=false;
   select * from u1, u2;